Next:
Function Template
, Previous:
D) Initialization
, Up:
Index
D) Explicit Instance(Stack)
stack.hpp
#ifndef
__STACK_HPP__
#define
__STACK_HPP__
#include
<deque>
template
<
typename
T
>
class
Stack
{
public
:
void
push
(
T
const
&
elem
)
;
void
pop
(
)
;
T
top
(
)
const
;
bool
empty
(
)
const
;
private
:
std
::
deque
<
T
>
elems
;
}
;
#endif
stack.cpp
#include
"stack.hpp"
#include
<string>
#include
<iostream>
template
<
typename
T
>
void
Stack
<
T
>
::
push
(
T
const
&
elem
)
{
std
::
cout
<<
"
Hello
"
;
}
// std::string
타
입
에
대
하
여
명
시
적
인
스
턴
스
화
template
void
Stack
<
std
::
string
>
::
push
(
std
::
string
const
&
)
;
Stack template의 push 구현을 std::string 타입에 대하여 명시적 인스턴스화가
stack.cpp를 읽는 과정에서 이루어 짐
오브젝트 파일에 Stack::push에 대한 구현이 존재
main.cpp
#include
"stack.hpp"
int
main
(
void
)
{
Stack
<
std
::
string
>
a
;
a
.
push
(
std
::
string
(
"
Hi
"
))
;
}
이후 사용할 때, 오브젝트 파일의 Stack::push 구현이 존재하기 때문에
이 후 링크할 때, 심볼을 링크할 수 있음
라이브러리 구현 중 일부 외부 노출을 피하고 싶은 경우, 명시적 인스턴스화 방식을 이용한다.